package me.szlx.thing.bundle;

import me.szlx.thing.Thing;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public interface ThingBundle<T extends Thing> {
    /**
     * 获取全部的事物对象。如果没有任何事物对象，则返回空的列表。
     *
     * @return 全部的事物对象。
     */
    List<T> getAll();

    static <T extends Thing> ThingBundle<T> combine(final ThingBundle<T>... bundles) {
        if (bundles == null || bundles.length == 0) {
            return null;
        }
        if (bundles.length == 1) {
            return bundles[0];
        }

        return () -> Stream.of(bundles)
                .flatMap(bundle -> bundle.getAll().stream().filter(t -> t != null))
                .distinct()
                .collect(Collectors.toList());

    }
}
